<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <!-- 导入页面的基本样式 -->
    <link rel="stylesheet" href="./css/search.css" />
    <!-- 导入 jQuery -->
    <script src="./lib/jquery.js"></script>
    <!-- 导入模板引擎 -->
    <script src="lib/template-web.js"></script>
  </head>

  <body>
    <div class="container">
      <!-- Logo -->
      <img src="./images/taobao_logo.png" alt="" class="logo" />

      <div class="box">
        <!-- tab 栏 -->
        <div class="tabs">
          <div class="tab-active">宝贝</div>
          <div>店铺</div>
        </div>
        <!-- 搜索区域（搜索框和搜索按钮） -->
        <div class="search-box">
          <input
            type="text"
            class="ipt"
            placeholder="请输入要搜索的内容"
            id="ipt"
          /><button class="btnSearch">搜索</button>
        </div>
        <!-- 搜索建议列表 -->
        <div id="suggest-list">
          <div class="suggest-item">黑马程序员</div>
          <div class="suggest-item">黑马程序员</div>
        </div>
      </div>
    </div>
    <!-- 模板结构 -->
    <script type="text/html" id="tpl_suggestlist">
      {{each result}}
      <!-- 搜索建议项 -->
      <div class="suggest-item">{{$value[0]}}</div>
      {{/each}}
    </script>
    <script>
      $(function () {
        // 1.定义延时器的ID
        let timer = null;
        // 2.定义防抖函数
        function debounceSearch(kw) {
          timer = setTimeout(function () {
            getSuggestList(kw);
          }, 500);
        }
        // 创建 缓存对象
        let cacheObj = {};
        // 为 输入框 绑定 keyup事件
        $("#ipt").on("keyup", function () {
          // 3.清空定时器
          clearTimeout(timer);
          let key = $(this).val().trim();
          // 如果 输入框的内容为空 清空搜索列表并隐藏 直接return
          if (key.length <= 0) {
            return $("#suggest-list").empty().hide();
          }
          // 先判断缓存中是否有数据
          if (cacheObj[key]) {
            // 如果有数据 就跳过后面的过程
            return render(cacheObj[key]);
          }
          // getSuggestList(key);
          debounceSearch(key);
        });
        function getSuggestList(kw) {
          $.ajax({
            url: "https://suggest.taobao.com/sug?q=" + kw,
            dataType: "jsonp",
            success: function (res) {
              console.log(res);
              render(res);
            },
          });
        }
        // 渲染UI结构
        function render(res) {
          // 如果没有需要渲染的数据 就return 将搜索建议栏清空并隐藏
          if (res.result.length <= 0) {
            return $("#suggest-list").empty().hide();
          }
          // 调用模板引擎 函数
          let htmlStr = template("tpl_suggestlist", res);
          // 将数据放入搜索建议栏 并显示
          $("#suggest-list").html(htmlStr).show();
          // a 获取到用户输入的内容 当作键
          let k = $("#ipt").val().trim();
          // b 需要将数据作为值 进行缓存
          cacheObj[k] = res;
        }
      });
    </script>
  </body>
</html>
